查看原文
其他

【VR/AR】DaydreamVR入门系列教程

2017-02-14 lewis2012 Gad-腾讯游戏开发者平台

目录

1)6个简单的步骤让Daydream VR从unity到手机


2)构建基于Daydream控制器的应用程序


3)DayDream VR中创建一个视频播放器


4)DayDream VR中的空间音频


16个简单的步骤让Daydream VR从unity到手机


我收到了很多人的消息,他们共同的问题是如何建立DaydreamVR应用程序从Unity到他们的手机。所以这是一个快速的文章,完成这一切的基础,在于6个简单的步骤。


从现在开始,我将使用Google Pixel手机,Nexus 6P可能仍然可以正常工作,但我不会进行测试。


1)  首先要做的是给自己一个Pixel手机(或其他Daydream认证的手机),并确保你是最新版本。


2)  前往Unity的Daydream技术预览网站,阅读最新信息,或者只是向下滚动到底部并下载最新的安装程序。我安装版本5.4.2f2-GVR13(Unity’s Daydream Technical Preview site)


3)  确保你已安装了最新的AndroidSDK和Java JDK,并在你的Unity preferences中进行链接。在Mac上:Unity>Preferences>ExternalTools。如果没有什么,或没有最新点击下载链接,并按照步骤下载JDK和AndroidStudio。PC上的preferences在编辑菜单下。


4)  现在打开Unity,用一个立方体和一个相机创建一个简单的测试场景。打开构建设置:在平台列表下的文件>构建设置选择Android,然后单击切换平台。


5)  In Build Settings > Player Settings >Other Settings select: 虚拟现实支持和从下拉列表中选择Daydream。确保你在最低API级别中选择Android 7.0(或更高)否则Daydream将不会显示,你会得到一些关于manifest文件的错误! 见图:



6)  构建和运行到你的手机,然后晒晒这个应用程序!


如果你想使用更多的Daydream功能,下载 DaydreamSDK并将该软件包导入你的项目,它包含一些演示场景供你尝试。对于更多的Daydream dev相关阅读以下文档:


·   Google’sDaydream Developer site.


·   Google’sDaydream Developer Overview with tuts and samplecode.


·   Unity’sDaydream Technical Preview Forum.


翻译自:< http://www.sdkboy.com/2016/12/building-daydream-vr-unity-phone-6-easy-steps/>;已获得作者翻译授权


2构建基于Daydream控制器的应用程序


自从我写了以前的Daydream教程之后,Daydream Unity SDK中的许多东西都发生了变化。这篇文章是一个全面的教程,介绍从头开始创建基于交互式Daydream控制器的应用程序的步骤。到最后,我们将有一个工作的VR应用程序,围绕场一个场景,有控制器肘模型,身体模型和基于控制器交互和传播。



你可以在这里下载完整的Unity包 here。我使用Unity版本5.4.2f2-GVR13和谷歌VR SDK为Unity v1.10参见谷歌VR开发人员网站了解更多信息 Google VRDeveloper,在这里看我写的快速开始并设置自己的Daydream VR here。 将这个包导入到一个空的Unity项目中,然后看看发生了什么。


开始


首先要做的是在Unity中创建一个新的场景,从场景中删除MainCamera(我们稍后再添加一个相机),并添加一个地平面以产生一个横向效果。接下来,将GVRControllerMain和GVRViewerMain Daydream组件添加到场景中。这些是Daydream应用程序的两个主力组件。


1)  GvrControllerMain:是Daydream控制器API的主要入口点。它还允许从Unity Inspector访问调整控制器的模型深度和旋转。


2)  GvrViewerMain:与头戴式显示器(HMD)通信。负责查询设备以查看参数,检索最新的头部跟踪数据并且可选地向设备提供所渲染的场景以用于失真校正。


你的场景的hierarchy面板应如下所示:



接下来,我们将设置Player对象来容纳MainCamera,控制器以及与用户物理连接的任何东西。 创建一个空的游戏对象称为Player,并将其y-pos等于1.0,因此用户头部离地面1米。 SDK包括一个有用的预制:GvrControllerPointer(GoogleVR / prefabs / UI /GvrControllerPointer),开箱即用,可以给我们一个控制器模型,一个激光指针和相当复杂自然旋转的“臂模型”。


1)  手臂模型:手臂模型(也称为手肘模型)是一种脚本,可以将控制器自然移动到你的身体,就像它连接到手臂时一样移动。因为我们实际上并不知道你的控制器在哪里,脚本通过使用你的手腕的倾斜来保持控制器正确的猜测位置。


2)  身体模型:概念上,身体模型将控制器保持在用户的侧面,左手或右手,并且当用户在y轴上旋转他们的身体/头戴式耳机时将其保持在正确的位置。


看看GvrControllerPointer。它包含两个对象:控制器和激光。控制器有一个GvrArmModel脚本附加它以后,带来很多便利,因为它解决了我们需要自己写手臂模型的所有痛苦。如果你继续深入到控制器的子游戏对象,你会发现一个Tooltips对象,我已经切换这个对象在检查器中,因为我认为这是多余的。


现在是时候添加一个相机作为Player对象的子对象。在相机的检查员设置它的标签为MainCamera在下拉和更新其剪切平面,使其为0.03。 如果我们不这样做,当你把它提高到眼睛水平,它会削减控制器的视野。你的hierarchy面板应如下所示:



现在构建并运行到你的手机和测试在你的Daydream耳机,你应该看到控制器沿着手臂模型移动,并旋转你的身体,直到你旋转你的头在y轴。



添加互动


这是一个好的开始,但应用程序实际上没有做任何事情。让我们在场景中添加一个对象,我们可以通过点击和悬停来与之交互。我将尽可能多地重用Daydream SDK提供的代码,这将包括演示场景中的一些脚本,即Teleport脚本。


要使控制器与场景中的对象进行交互,你需要设置三件事:


1)  事件系统。


2)  附加到我们正在与之交互以处理事件的对象的事件触发器。


3)  一个Raycaster看哪些对象已经与激光的路径相交。


事件系统


让我们添加一个EventSystem处理来自控制器的事件。右键单击hierarchy面板窗口,然后在UI子菜单下拉菜单中选择EventSystem。在EventSystem的面板中删除独立输入模块,并在其位置从SDK添加GvrPointerInputModule脚本。这是一个专用的InputModule,用于与Daydream控制器的3D指针或Cardboard的基于凝视的指针一起使用。面板应该看起来像这样:



事件触发器


添加一个多维数据集到场景中,并移动它,使它坐落在摄像机前面的某个位置,这是我们将与之交互的对象。在多维数据集的面板中添加SDK的demo中附带的Teleport脚本,我们将使用它作为一种简单的方法,在点击时随机移动多维数据集。创建两个不同的彩色材料,并将它们拖动到Teleport脚本的Inactive和GazedAt字段中,以便悬停状态。现在,通过在面板中选择“添加新组件”,向该立方体添加一个新的事件触发器组件。然后在组件中选择添加新事件类型,并从下拉列表中选择指针单击。将Teleport脚本拖动到事件的对象字段中,并在下拉列表中选择Teleport.TeleportRandomly。对PointerEnter和PointerExit事件重复此操作,但选择Teleport.SetGazedAt作为触发方法,当用户悬停在多维数据集上时,将交换彩色材料。多维数据集的面板现在应该如下所示:



Raycaster


要获得raycasting工作,添加GvrPointerPhysicsRaycaster脚本到Player的摄像头。这个脚本提供了一个raycaster,用于我们之前添加到EventSystem的GvrPointerInputModule。他们一起raycast和冒出事件消息在相交的对象。


构建和运行场景,你应该看到这样的:



添加传送


直到这一点,我们没有实际编码任何东西,软件工程等同于玩乐高积木。然而,如果我们想传送在屏幕周围,这将不得不改变。我要用一个新的方法更新Teleport类。我们可以为这个代码创建一个新类,但我觉得它在Teleport类中很好,所以让我们把它放在那里。我们还需要在地平面上添加一个EventTrigger来监听teleport点击事件,然后将指针的raycasted位置传递给这个新方法来更新播放器的位置。让我们先创建脚本。



该脚本从EventSystem中获取BaseEventData对象,将其转换为PointerEventData类型,然后从当前raycast中提取raycast命中位置。然后,我们简单地将这个位置分配给玩家的位置。 除此之外,我们还需要创建一个对玩家游戏对象的公开引用,并使用Unity.EventSystems类路径作为导入:



钩住它是超级简单。将更新的Teleport脚本添加到地面游戏对象,将玩家的引用从Teleport脚本中的hierarchy面板拖动到玩家字段,我还将地面材质颜色拖动到Inactive和GazedAt字段,因此不会 更新地面的颜色。向地平面添加一个新的EventTrigger,就像我们之前为多维数据集所做的一样,但这次我们只需要一个PointerClick事件,在Teleport脚本中拖动到EventTrigger的对象引用中,并从下拉列表中选择TeleportTo方法 将在列表的顶部,因为它传递BaseEventData。 你的inspector面板现在应该看起来像这样:



现在构建和运行场景,你应该能够传送周围以及与多维数据集交互。


希望,本教程有助于你熟悉从头开始构建Daydream应用程序。


翻译自:<http://www.sdkboy.com/2016/12/building-daydream-controller-based-app-scratch/>;已获得作者翻译授权


3在Daydream VR中创建一个视频播放器


我对Daydream VR团队在Unity SDK中所做的所有工作都印象深刻。我挖掘的越多越发现,我发现有用的方法,得到Daydream开发和让运行快速。本教程将向你介绍如何在Daydream中使用SDK组件轻松创建360度球形和矩形视频的视频播放器。 欢迎在Daydream来到懒惰的开发者视频指南。


你可以在这里下载完成的项目包here ,并将其导入到一个新的空Unity项目。在项目中,你会发现一个SDKBoyTut目录,其中有两个场景,一个用于矩形视频,另一个用于360度球形视频。这两个场景使用我以前的Daydream教程,Building a Daydream Controller App from Scratch作为基础。


标准矩形视频


如果你从头开始下载并将Unity Daydream SDK包导入到一个新项目中。你还需要导入GvrVideoPlayer.unitypackage。将主SDK包导入Unity后,GvrVideoPlayer.package在assets / GoogleVR目录中创建。导入时,GvrVideoPlayer包会为我们的视频文件生成一个流媒体资源文件夹,并在Android插件文件夹中添加对Gvr exoplayer的支持。



让我们从建立一个标准的矩形视频屏幕开始。再次,我使用我以前的Daydream控制器教程作为基础,所以我不打算在这里的任何其他控制器的东西。


1)  打开你的场景,添加一个空的gameObject并将其称为VideoPlayer。


2)  到视频播放器和一个新的四边形和标注它为屏幕。


3)  选择VideoScreen游戏对象,并在检查器中按添加组件按钮,搜索GvrVideoPlayerTexture脚本并添加它。


4)  在组件中将缓冲区大小设置为4,并在视频URL字段中添加了:jar:file:// $ {Application.dataPath}!/assets/vid_kungfu.mp4,并在streamingAssets文件夹中添加了一个名为vid_kungfu.mp4的视频。


5)  我已将初始分辨率设置为最高,选择调整宽高比,并将GvrVideoPlayerTexture脚本中的视频类型设置为“其他”。这很重要,除非将其设置为“其他”,否则你的视频将不会运行。


6)  设置VideoPlayerTexture后,再次选择添加组件,并将AutoPlayVideoScript添加到VideoScreen中。这是一个非常有用的脚本,让你将视频设置为自动播放和循环。我设置了2秒的延迟并设置循环为真。


7)  在SDK中搜索项目中的VideoControls prefab,并将其添加到hierarchy面板中的VideoPlayer gameObject。顾名思义,VideoControls包含用于控制视频的用户界面。我们将使用默认UI运行,但你可以轻松地重新设置视觉元素以匹配你的设计。


8)  VideoControls预览在Inspector中的PlayerReferenceScript中有一个Player字段。 将VideoScreen拖动到VideoControls中的Player字段,以将视频屏幕与视频控件相关联。



你的hierarchy面板是这样的:



现在运行的项目!球形360度视频



把我们已经拥有的一个球形360度视频播放器变得很简单:


1)  首先要做的是在VideoPlayer中添加一个新的球体,并将它的比例设置为x:30,y:30,z:30。


2)  然后,将GvrVideoPlayerTexture和AutoPlayVideo脚本添加到球体,就像对矩形视频一样,但是,我们现在需要一个360度视频文件来链接到视频网址字段。我已经在教程Unity包中包括一个。视频是《street party I cameacross one time in San Francisco》。


3)  为了让球体在内部播放视频,我们需要向球体游戏对象添加一个着色器,MonoPanoSphereMaterial。 这不仅会在球体内部显示视频,而且会正确显示。SDK还包括StereoPanoSphereMaterial,如果你的球形视频使用MonoPanoSphereMaterial渲染,则尝试使用此方法。


4)  最后选择VideoControls并将球体拖到VideoPlayerReference脚本的Player字段。这将允许我们通过控件控制球面视频的播放。


5)  现在构建项目到你的手机上。


人们不断问我如何在Daydream中播放360度球形视频,我说建立自己的播放器。在Daydream中使用SDK组件构建360度球形视频播放器,再简单不过了。在本教程中,我们构建了一个,甚至没有编写任何代码。


 翻译自:<http://www.sdkboy.com/2017/01/playing-videos-daydream-vr/>;已获得作者翻译授权


4DaydreamVR中的空间音频


空间化音频是指似乎自3D空间中的特定方向的声音。它是几个输入中的一个,组合起来为VR环境中的用户创造沉浸感。Daydream SDK附带一套强大的组件,使我们能够毫不费力地模拟现实世界中声音的复杂行为。


虽然空间音频背后的行为函数和底层概念相当复杂,但DaydreamUnity SDK提供的音频组件非常容易使用。有关空间音频的详细信息,请查看Daydream网站上的详细说明。


本教程是使用此版本的Unity5.4.1 -GVR13 Technical preview 预览版本1.1 DaydreamUnity SDK构建的。看到我写的教程设置自己的DayDream开发 here和我的介绍建立一个基础的场景与控制器和传送 here。


定向音频



我用DayDream音频组件的自带的样例创建了一个完整工作的Unity项目。从这里下载它here,并放入在SDKBoyTut场景中。你会看到我已经添加了一些Wav格式的音频到项目中,并用GvrAudio组件创建了一个场景,附加到各种离散在环境的gameObjects中。还有一个空间音频组件的例子。使用耳机在手机上运行项目,并传送到周围,以了解空间化音频的工作原理。


插件设置


要开始使用SDK音频组件,你需要先选择GvrAudioSpatializer作为插件。


1)编辑>项目设置>音频


2)在音频管理器检查器中,在Spatializer插件下拉菜单中选择GvrAudioSpatializer。


音频源


我们要看的第一个组件是GvrAudioSource。 此组件提供来自空间中特定点的声音。我们将组件添加到gameObject中,然后将其放置在场景中的某个位置。当戴耳机或在一个环声系统,音频似乎来自组件放置在3D空间中的那个方向。


1)  要使它工作非常的简单,添加一个新的gameObject到场景,例如一个球体,并在球体的检查器中单击“添加组件”,然后选择GvrAudioSource。


2)  在AudioClip字段中拖放项目中的音频文件。Unity支持AIFF,WAV,MP3和Ogg格式。


3)  我已经将Loop和PlayOnAwake布尔值切换为true,并将大多数其他属性设置为默认值。


组件上的其他比较有用的属性之一是VolumeRollOff,它控制声音可以听到的最大距离,以及声音的音量随着距离减小的方式:对数或线性。 如果你希望音频在实体对象后面消失,请切换开启遮挡功能。



房间音频


下一个我们要看的组件是GvrAudioRoom组件。顾名思义,它模仿了围墙的音频效果。这个组件实际上不产生任何声音,而是处理混响和隔音通过房间墙壁的声音。


1)将GvrAudioRoom组件添加到空的gameObject。在演示中,我用立方体构建了一些简单的墙来代表房间。


2)添加音频空间组件后,你会注意到的第一件事是立方体的黄色线框。 这代表空间的大小。 使用GvrAudioRoom组件中的大小属性缩放此框。



4)  音频空间组件本身不会产生任何声音,你需要添加一个GVRAudioSource的gameObject并将其放在房间内。



GvrAudioRoom可以对各种类型的墙面材料进行复杂的控制,例如混凝土,玻璃,水和石膏。我们还可以通过反射性质和混响的增益,亮度和延迟时间的方式来调整房间内声音回声。


声场


GvrAudioSoundfield允许多声道环绕声定向音频响应头部运动作为一个大型复杂的现场高保真度立体声复制技术,超出了本教程的范围,但是这种复杂性已经被音频声场组件抽象出来。声场工作与音频类似的方式,因为定向光工作与照明。无论你的位置,声音从一个特定的方向过来。因此,它适用于360视频没有平移的位置运动,只是旋转。要使用GvrAudioSoundField组件获得精确的定向声音,你需要一个多声道环绕声文件。在Unity中有一个限制,只允许两个通道的音频与ambisonics,而不是通常的四个。因此,你需要使用首选的音频编辑软件将音频文件合并为两个。我发现该组件也可以在标准的音频文件下工作,如果你想有一个恒定的环境声音从一个特定的方向。


空间音频是VR开发人员工具包中的一个强大工具,它增加了对周围环境的认识,并产生了情感的影响。Daydream SDK中的Gvr音频组件套件提取了空间化音频的底层复杂性,允许VR开发人员专注于我们如何做到最好的-构建奇怪和精彩的VR游戏和应用程序。


翻译自:<http://www.sdkboy.com/2017/01/spatial-audio-daydream-vr/>;已获得作者翻译授权




点击一下立即阅读近期热文


VR动向预测帖:CES 2017划重点啦

《Eagle Flight》开发者制作舒适VR游戏的经验

如何打造一款类《西部世界》的爆款VR体验游戏

Epic Games资深美术分享:VR视觉设计的五点建议

......


添加小编微信,发送“VR”,可享双重福利

1.加入GAD游戏VR交流圈

获取行业干货资讯

观看大牛分享直播

2.直接领取GAD独家VR资料库

内含

研究报告、游戏制作、项目分享等

全套资料


↓长按添加小编GAD-安琪


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存